#include "videoimageprovider.h"
#include <QDebug>

// 构造函数：接收视频控制器指针，初始化QQuickImageProvider为Image类型
VideoImageProvider::VideoImageProvider(VideoController *controller)
    : QQuickImageProvider(QQuickImageProvider::Image),  // 初始化图像提供者为QImage类型
    m_controller(controller)  // 保存视频控制器指针
{
}

// 重写请求图像函数：供QML调用获取图像
QImage VideoImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
{
    Q_UNUSED(id)  // 未使用id参数

    // 如果控制器有效
    if (m_controller) {
        // 从控制器获取当前帧
        QImage frame = m_controller->getCurrentFrame();
        if (!frame.isNull()) {  // 如果帧有效
            // 如果请求了特定大小且有效，则缩放图像
            if (requestedSize.isValid() && requestedSize.width() > 0 && requestedSize.height() > 0) {
                frame = frame.scaled(requestedSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
            }

            // 如果需要返回大小信息，则设置
            if (size) {
                *size = frame.size();
            }
            return frame;  // 返回处理后的帧
        }
    }

    // 如果没有有效帧，返回黑色背景图像作为占位符
    QImage placeholder(640, 480, QImage::Format_RGB888);
    placeholder.fill(Qt::black);

    // 根据请求大小缩放占位符
    if (requestedSize.isValid() && requestedSize.width() > 0 && requestedSize.height() > 0) {
        placeholder = placeholder.scaled(requestedSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
    }

    // 设置大小信息
    if (size) {
        *size = placeholder.size();
    }
    return placeholder;
}
